#ifndef _FRM_OBJECTS_H
#define _FRM_OBJECTS_H

#include "Ogre.h"

//CEGUI
#include <CEGUI/CEGUI.h>
#include "OgreCEGUIRenderer.h"
#include "OgreCEGUIResourceProvider.h"

using namespace Ogre;
//using namespace CEGUI;

//#include "Physics.h"
//class PhysicsSystem;

class frmObjects
{
private:
	void fillMeshList();
	
	void addNewGO();
	void deleteGO();
	void saveGO();
	void spawnGO();

public:
	frmObjects();
	~frmObjects();
	
	bool isLoading;

	void fillObjectsList();

	//Subscribe events to this form
	void subscribeEvents();
	
	//Setup the elements of the GUI window
	void setup();

	void fillConfigFromGui();
	void updateLight();
	void updateControls();
	void fillLightDataFromObject(std::string object);
	//void updateObjectYawMove();

	//////////////////////////////////////////////////////////////////////////////////////////////////////
	//Objects GUI Events
	//////////////////////////////////////////////////////////////////////////////////////////////////////
	bool evtObjectsClose_click(const CEGUI::EventArgs& e);
	bool evtObjectsList_click(const CEGUI::EventArgs& e);
	bool evtObjectsListMesh_click(const CEGUI::EventArgs& e);
	bool evtObjectsNew_click(const CEGUI::EventArgs& e);
	bool evtObjectsDelete_click(const CEGUI::EventArgs& e);
	bool evtObjectsSave_click(const CEGUI::EventArgs& e);
	bool evtObjectsSpawn_click(const CEGUI::EventArgs& e);
	bool evtObjectsMove_click(const CEGUI::EventArgs& e);
	bool evtObjectsFollowCursor_click(const CEGUI::EventArgs& e);

	bool evtObjectsMeshOpt_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightOpt_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightIsRagdoll_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightType_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightRange_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightConstant_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightLinear_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightQuadratic_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightInner_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightOuter_change(const CEGUI::EventArgs& e);
	
	bool evtObjectsLightDiffuseRed_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightDiffuseGreen_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightDiffuseBlue_change(const CEGUI::EventArgs& e);
	
	bool evtObjectsLightSpecularRed_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightSpecularGreen_change(const CEGUI::EventArgs& e);
	bool evtObjectsLightSpecularBlue_change(const CEGUI::EventArgs& e);

	//bool evtObjectsYaw_change(const CEGUI::EventArgs& e);
	//bool evtObjectsPitch_change(const CEGUI::EventArgs& e);
	//bool evtObjectsRoll_change(const CEGUI::EventArgs& e);
	bool evtObjectsResetRotation_click(const CEGUI::EventArgs& e);

};

#endif